package com.itgm.jiayun_web_project.utils;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jws;
import io.jsonwebtoken.JwtException;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;
import javax.crypto.SecretKey;
import java.util.Date;
import java.util.Map;

/**
 * JWT工具类（适配JJWT 0.12.5+）
 */
public class JwtUtils {
    
    // Base64编码的原始密钥（与之前保持一致）
    private static final String BASE64_SECRET = "aXRoZWltYQ==";
    
    // 使用安全的密钥对象（HMAC-SHA256）
    private static final SecretKey SECRET_KEY = Keys.hmacShaKeyFor(BASE64_SECRET.getBytes());
    
    // 令牌过期时间：12小时
    private static final long EXPIRATION_TIME = 12 * 3600 * 1000;

    /**
     * 生成JWT令牌
     * @param claims 自定义声明信息
     * @return 生成的JWT令牌字符串
     */
    public static String generateToken(Map<String, Object> claims) {
        Date expirationDate = new Date(System.currentTimeMillis() + EXPIRATION_TIME);
        
        return Jwts.builder()
                .claims(claims)  // 设置声明（新API）
                .expiration(expirationDate)
                .signWith(SECRET_KEY, Jwts.SIG.HS256)  // 指定算法签名
                .compact();
    }

    /**
     * 解析并验证JWT令牌
     * @param token JWT令牌字符串
     * @return 解析后的声明信息
     * @throws JwtException 如果令牌无效或过期
     */
    public static Claims parseToken(String token) {
        Jws<Claims> jws = Jwts.parser()
                .verifyWith(SECRET_KEY)  // 设置验证密钥
                .build()
                .parseSignedClaims(token);  // 解析签名令牌
        
        return jws.getPayload();
    }
}